扫雷

您所在的位置:网站首页 matlab 扫雷 扫雷

扫雷

#扫雷| 来源: 网络整理| 查看: 265

扫雷是电脑上很经典的游戏,虽然我没玩过。为了写这个博客,我特意去网上玩了一会。 几次调试之后,我觉得这个比三子棋要复杂一些,尤其是空白展开算法上和堵截玩家有的一拼。这个与实际游戏差别较大,不能使用光标。 接下来。我会很详细的讲解每一步分析。

扫雷 写代码前,扫雷需要什么进行主函数文件的代码game文件以及函数步骤 在主函数文件中使用game函数布值棋盘(雷盘和玩家棋盘)打印棋盘函数玩家排雷计算雷数的函数空白递归算法

写代码前,扫雷需要什么

1,游戏需要初始选择菜单 2,需要布置两个棋盘,一个布置雷,一个展示给玩家看 3,打印棋盘 4,玩家要输入选择的坐标,并且可以多次输入游戏坐标 5,每次输入后打印棋盘,同时判断是否继续还是输赢。 6,玩家每次输入坐标,都进行一次递归展开。

进行主函数文件的代码 void option(int input) { switch (input)//分支语句 { case 1: game();//扫雷开始 break; case 0: printf("Logon out the game\n"); break; default: printf("Input error,please input again\n"); break; } } void menu(void) { printf("Welcome to game\n"); printf("\n"); printf("****************\n"); printf("*----1.play----*\n"); printf("*----0.exit----*\n"); printf("****************\n"); } int main(void) { int input; srand((unsigned int)time(NULL)); do { menu();//打印游戏菜单 printf("please input option(1/0):>"); scanf("%d", &input); option(input);//选项判断 } while (input); } game文件以及函数步骤 #include #define ROW 9 #define COL 9 #define _CRT_SECURE_NO_WARNINGS #define ROWS ROW+2 #define COLS COL+2 #define LEVEL 10 #include #include void game(void);//扫雷游戏 void setboard(char board[ROWS][COLS], int rows, int cols,char ret);//初始布置棋盘内容 void showboard(char board[ROWS][COLS], int rows, int cols);//负责打印棋盘 //void player(char board[ROWS][COLS]);//玩家输入 void setmine(char mine[ROWS][COLS], int row, int col);//布置地雷 int cleanmine(char board[ROWS][COLS], char mine[ROWS][COLS], int row, int col); void space(char board[ROWS][COLS], char mine[ROWS][COLS], int x,int y);//空白递归算法 int test(char mine[ROWS][COLS], int x, int y);//计算周围雷数 在主函数文件中使用game函数 void game() { char board[ROWS][COLS]; char mine[ROWS][COLS]; setboard(mine, ROWS, COLS,'0');//创建初始棋盘 setmine(mine, ROW, COL);//布雷要在一次游戏开始时就布好雷,只布一次雷 setboard(board, ROWS, COLS, '*');//给玩家看的棋盘 while (1) { int ret; showboard(mine, ROW, COL);//打印布雷图 showboard(board, ROW, COL);//打印玩家棋盘 //player(board); ret=cleanmine(board,mine,ROW,COL);//扫雷 //showboard(board, ROW, COL); int count = 0;//可以用一个函数进行封装 for (int i = 1; i if (board[i][j] == '*') count++; } } if (count == LEVEL) { printf("you win\n"); break; } if (ret == 0) break; system("cls"); } } 布值棋盘(雷盘和玩家棋盘) void setboard(char board[ROWS][COLS], int rows, int cols,char ret) { int i;//主要靠ret决定是布雷还是布置玩家棋盘 for (i = 0; i board[i][j] = ret; } } } 打印棋盘函数

每次将棋盘重新定义后就可以打印,但是我们设置的棋盘要比打印的大两行,为了保证之后计算雷数的循环成立。

void showboard(char board[ROWS][COLS], int rows, int cols) { for (int a = 0; a printf("%c|", board[i][j]); } printf("\n"); } } 玩家排雷 int cleanmine(char board[ROWS][COLS],char mine[ROWS][COLS],int row,int col) { int x, y; while (1) { printf("please input the coordinate:>"); scanf("%d %d", &x, &y); if (x >= 1 && x = 1 && y board[x][y] = test(mine, x, y) + '0'; //空白递归算法 space(board, mine, x, y); //showboard(board, ROW, COL); break; } else if (mine[x][y] == '1') { printf("You died\n"); return 0; break; } } else printf("Coordinate is illegal,please input again\n"); } printf("player\n"); //showboard(board, ROW, COL); return 1; } 计算雷数的函数 int test(char mine[ROWS][COLS], int x, int y) { int count = 0; for (int i = x - 1; i if (mine[i][j] == '1') count++; } } return count;//count就代表返回的雷数 } 空白递归算法 void space(char board[ROWS][COLS], char mine[ROWS][COLS], int x, int y) { int i; if(test(mine, x, y)==0) { board[x][y] = ' '; for (i = x-1; i if (i > 0 && i 0 && j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3